package com.kexio.core.security.service;

import com.kexio.core.security.context.UserContext;

/**
 * 用户上下文服务接口
 *
 * @author Kexio Team
 * @since 1.0.0
 */
public interface UserContextService {

    /**
     * 初始化用户上下文
     *
     * @param accessToken 访问令牌
     * @return 是否初始化成功
     */
    boolean initUserContext(String accessToken);

    /**
     * 根据用户ID加载用户上下文
     *
     * @param userId 用户ID
     * @return 用户上下文
     */
    UserContext loadUserContext(Long userId);

    /**
     * 根据用户名加载用户上下文
     *
     * @param username 用户名
     * @return 用户上下文
     */
    UserContext loadUserContext(String username);

    /**
     * 刷新用户上下文(重新加载用户信息)
     *
     * @return 是否刷新成功
     */
    boolean refreshUserContext();

    /**
     * 清除当前用户上下文
     */
    void clearUserContext();

    /**
     * 检查用户是否已认证
     *
     * @return 是否已认证
     */
    boolean isAuthenticated();

    /**
     * 更新用户上下文信息
     *
     * @param userContext 新的用户上下文
     */
    void updateUserContext(UserContext userContext);

    /**
     * 合并用户上下文信息
     *
     * @param additionalContext 额外的上下文信息
     */
    void mergeUserContext(UserContext additionalContext);
}
